(de sort (x) (flatten (mktree x nil)))
(de mktree (x a)
(if (null x) a (mktree (cdr x) (add (car x) a))))
(de add (a u) (cond
((null u) [a nil nil])
((< a (car u)) [(car u) (add a (cadr u)) (caddr u)])
(t [(car u) (cadr u) (add a (caddr u))])))
(de flatten (x)
(if (null x) nil
(append (flatten (cadr x)) (cons (car x) (flatten (caddr x))))))